import asyncio,time


t1 = time.time()
urls = [i for i in range(1,101)]


async def GetResponse(url):
    # 使用多任务异步协程时，要注意任务代码中不要出现同步的代码块，如果出现同步代码块，就会直接中断异步任务，变成同步任务
    # time.sleep(1) # 是一个同步操作
    print(url)
    await asyncio.sleep(1)  # 异步中的sleep使用，模拟阻塞操作
    # 在多任务异步协程中，当代码运行遇到阻塞时，需要使用await进行手动挂起


if __name__ == '__main__':
    tasks = []
    for url in urls:
        # task = asyncio.create_task(GetResponse(url))  # 任务创建
        task = asyncio.ensure_future(GetResponse(url))
        tasks.append(task)
    task = asyncio.ensure_future(GetResponse(999))  # 创建单个任务
    loop = asyncio.get_event_loop()  # 实例化事件循环对象
    loop.run_until_complete(asyncio.wait(tasks))  # 开始执行任务，直到任务结束,如果是多任务
    # loop.run_until_complete(task)  # 如果是单任务
    # 需要asyncio.wait(tasks)方法来执行多个任务
    # 单任务时直接将任务传入事件循环当中即可，不用使用wait方法
    t2 = time.time()
    print('代码运行时长为：',t2-t1)  # 单线程运行时长至少为100秒
